﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NHibernate;
using NHibernate.Cfg;
using DemoNHibernate.Domain;
using NHibernate.Tool.hbm2ddl;

namespace DemoNHibernate.DAO
{
	class NHibernateHelper
	{		
		private static ISessionFactory _oSessionFactory;
 
        private static ISessionFactory SessionFactory
        {
            get
            {
                if(_oSessionFactory == null)
                {
                    Configuration oConfiguration = new Configuration();
                    oConfiguration.Configure();
					// 1er méthode : chargement de l'assembly, NHibernate se débrouille.
					// C'est la meilleur façon. Mais pourquoi ?
                    oConfiguration.AddAssembly(typeof(Cotisations).Assembly);					
					// 2eme méthode : on charge chaque class/table
					//oConfiguration.AddClass(typeof(Cotisations));
					//oConfiguration.AddClass(typeof(Indemnites));
					//oConfiguration.AddClass(typeof(Employe));
                    _oSessionFactory = oConfiguration.BuildSessionFactory();

					// Création ou Maj de l'ensemble des tables
					// Attention la création, efface tous et recréé
					if( true )
						new SchemaUpdate(oConfiguration).Execute(false, true);
					else
						new SchemaExport(oConfiguration).Execute(false, true, false);
					
                }
                return _oSessionFactory;
            }
        }		
 
        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }

		public static void CloseSession()
        {
			if( SessionFactory != null )
				SessionFactory.Close();
        }		
	}
}
